
package com.xtsoft.platform.base.system.repository;
/*
*    上海信拓信息技术有限公司 Koala企业综合信息管理系统
*    Copyright (C) 2010-2015 ShangHai XinTuo Software Inc.
*/


import com.xtsoft.core.repository.GenericRepository;
import com.xtsoft.platform.base.system.domain.ResourceRole;
import com.xtsoft.platform.base.system.domain.SysResource;
import com.xtsoft.platform.base.system.domain.SysRole;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;


@Repository
public interface ResourceRoleRepository extends GenericRepository<ResourceRole,String> {
	/**
	 *  <p> 根据角色Id、资源Id删除角色拥有的资源  </p>  
	 * @param resUniqueId
	 * @param roleId
	 * @throws  
	 */
	@Modifying
	@Query(value = "delete from resource_role where resUniqueId = ?1 and roleId = ?2",nativeQuery = true)
	public void deleteByResUniqueIdAndRoleId(String resUniqueId,String roleId);
	/**
	 * 
	 * <p> 根据角色Id、资源Id集合删除角色拥有的资源  </p>  
	 * @param resUniqueIds
	 * @param roleId
	 * @return void
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 
	 * @time 上午10:31:55
	 */
	public void deleteBySysResourceResUniqueIdInAndSysRoleRoleId(List<String> resUniqueIds,String roleId);
	/**
	 * 
	 * <p> 根据角色、资源Id集合删除角色拥有的资源  </p>  
	 * @param resUniqueIds
	 * @param sysRole
	 * @return void
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 
	 * @time 上午10:41:39
	 */
	public void deleteBySysResourceResUniqueIdInAndSysRole(List<String> resUniqueIds, SysRole sysRole);
	/**
	 * 
	 * <p> 根据角色获取资源角色集合 </p>  
	 * @param role
	 * @return
	 * @return List<ResourceRole>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 上午10:09:33
	 */
	public List<ResourceRole> findBySysRole(SysRole role); 
	/**
	 * 
	 * <p> 根据资源获取资源角色集合  </p>  
	 * @param sysResource
	 * @return
	 * @return List<ResourceRole>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 上午10:28:39
	 */
	public List<ResourceRole> findBySysResource(SysResource sysResource);

	/**
	 * 
	 * <p> 根据角色集合获取资源角色集合  </p>  
	 * @param roles
	 * @return
	 * @return List<ResourceRole>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 上午10:10:07
	 */
	public List<ResourceRole> findBySysRoleIn(List<SysRole> roles);
	/**
	 * 
	 * <p> 根据资源集合获取资源角色集合  </p>  
	 * @param roles
	 * @return
	 * @return List<ResourceRole>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 上午10:10:07
	 */
//	public List<ResourceRole> Resource(List<SysResource> resources);	
	/**
	 * 
	 * <p> 根据角色查找某角色授权数量  </p>  
	 * @param sysRole
	 * @return
	 * @return long
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 上午10:25:51
	 */
	public long countBySysRole(SysRole sysRole);
	/**
	 * 
	 * <p> 查找某资源授权数量  </p>  
	 * @param roleId
	 * @return
	 * @return long
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 上午10:25:51
	 */
	public long countBySysResource(SysResource resource);
	/**
	 * 
	 * <p> 根据角色删除角色授权  </p>  
	 * @param roleId
	 * @return void
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 上午10:27:38
	 */
	public void deleteBySysRole(SysRole sysRole);
	/**
	 * 
	 * <p> 根据资源删除角色授权  </p>  
	 * @param sysResource
	 * @return void
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 下午2:30:46
	 */
	public void deleteBySysResource(SysResource sysResource);
	/**
	 * 
	 * <p> 根据资源集合删除这些资源的角色授权   </p>  
	 * @param resources
	 * @return void
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 
	 * @time 下午3:37:00
	 */
	public void deleteBySysResourceIn(List<SysResource> resources);
	/**
	 * 
	 * <p>  根据资源ID集合，删除资源角色授权--高效删除  </p>  
	 * @param ids
	 * @return long  删除的记录数
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 下午9:41:13
	 */
	@Modifying
	@Query("delete from ResourceRole en where en.sysResource.resUniqueId in ?1")
	public Integer deleteByResUniqueIds(List<String> ids);
	/**
	 * 
	 * <p>  根据角色ID集合，删除资源角色授权--高效删除  </p>  
	 * @param id
	 * @return long  删除的记录数
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 下午9:41:13
	 */
	@Modifying
	@Query("delete from ResourceRole en where en.sysRole.roleId = ?1")
	public Integer deleteByRoleId(String id);


	public List<ResourceRole> findBySysResourceAndSysRole(SysResource sysResource,SysRole sysRole);
}